package org.etnaframework.module.cron;

import org.springframework.data.redis.connection.RedisConnectionFactory;

/**
 * 定时任务组件的配置，需实现对应的接口并配置到SpringConfiguration
 *
 * @author jasyaf
 * @since 2024-04-06
 */
public interface ICronCustomizer {

    /**
     * 总开关
     */
    boolean enabled();

    /**
     * 如果想要在集群模式部署时执行定时任务互斥（即集群部署时，同一时间只有一个实例上能触发定时任务），需要在这里配置一个redis连接实例
     */
    RedisConnectionFactory getRedisConnectionFactory();

    /**
     * 超时事件处理
     *
     * @param location 定时任务位置
     * @param startMs  任务开始时间（UNIX时间毫秒）
     */
    void onTimeout(String location, long startMs);

    /**
     * 异常事件处理
     *
     * @param location 定时任务位置
     * @param t        异常
     */
    void onError(String location, Throwable t);
}
